For distributed applications, versioning and upgrading of the server often result in the need to have multiple clients in the user machine. For example, one physical machine can have multiple types of the communications clients (e.g., e-mail, instant messaging, and realtime communications clients) and additionally, there can be multiple versions of the same client application.
The client applications need to handle many different types of data to either support different functionalities and/or to communicate with different versions or types of servers. All of these heterogeneous kinds of input data need to be processed locally to ensure reaching the correct client application and eventually to enable the client application to communicate with the correct server and provide the desired functionality to the user.